#!/bin/bash

# 1. 验证参数个数
if [ $# -eq 0 ]; then
    echo "错误：请至少指定一个图片路径参数。"
    exit 1
fi

# 2. 进入项目目录并同步远程仓库
# shellcheck disable=SC2164
cd "$(dirname "$0")"
git fetch -f
git pull -f

# 3. 获取图片直链前缀
remoteUrl=$(git remote get-url origin | sed 's/\.git$//')
currentBranch=$(git branch --show-current)
remoteRepoUrl="${remoteUrl}/raw/${currentBranch}"

# 4. 循环遍历所有参数
results=""
uploaded=false # 标识是否需要上传文件到git远程仓库
sep=" " # 上传成功后图片直链地址分隔符
for f in "$@"; do
    # 判断文件是否存在
    if [ ! -f "$f" ]; then
        results=$results"错误：文件不存在-$f$sep"
        continue
    fi

    # 判断文件是否为图片
    fileExt="${f##*.}"
    supportedExtensions="jpg jpeg png bmp gif tif pcx tga exif fpx svg psd cdr pcd dxf ufo eps ai raw WMF webp avif apng"
    if ! echo "$supportedExtensions" | grep -Eq "${fileExt}"; then
        results=$results"错误：不支持的文件类型-$f$sep"
        continue
    fi

    # 5. 获取当前时间并格式化
    dateDir=$(date +%Y/%m/%d)

    # 6. 使用md5sum计算文件的哈希值
    md5Hash=$(md5sum "$f" | awk '{print $1}')
    newFileName="${dateDir}/${md5Hash}-$(basename $f)"

    # 查找文件在项目仓库中的相对路径
    path=$(find . -type f -name "$newFileName" 2>/dev/null)
    if [ -n "$path" ]; then
        # 7. 如果文件已存在，则获取直链并存储
        results=$results"${remoteRepoUrl}/${newFileName}$sep"
    else
        # 移动文件到新位置
        mv -f "$f" "$newFileName"
        # 记录文件直链
        results=$results"${remoteRepoUrl}/${newFileName}$sep"
        uploaded=true
    fi
done

# 8. 调用git命令上传图片文件
if [ "$uploaded" = true ]; then
    git add .
    # shellcheck disable=SC2145
    git commit -m "上传文件: $@"
    git push
fi

# 9. 打印所有上传成功的图片直链
echo "$results" | tr ' ' '\n'
exit 0

